package com.mixsmart.core.service;

import java.io.Serializable;
import java.util.ArrayList;

import com.mixsmart.core.bean.entity.IEntityBean;
import com.mixsmart.spellsql.ICondition;

/**
 * 管理服务类--接口
 * 主要是定义了一些通用的增删改方法
 * @author lmq
 * @version 1.0
 * @since JDK版本大于等于1.6
 * 2016年1月15日
 */
public interface IMgrService<T extends IEntityBean, PK extends Serializable> extends IBaseService<T, PK> {

	/**
	 * 保存数据
	 * @param t 实体对象
	 * @return 成功返回：true；失败返回：false
	 */
	public boolean save(T t);
	
	/**
	 * 保存数据
	 * @param t 实体对象
	 * @return 成功返回：true；失败返回：false
	 */
	public boolean saveOrUpdate(T t);
	
	/**
	 * 批量保存数据
	 * @param ts 实体对象
	 * @return 成功返回：true；失败返回：false
	 */
	public boolean save(ArrayList<T> ts);
	
	/**
	 * 保存数据
	 * @param bean 实体对象
	 * @return 成功返回：true；失败返回：false
	 */
	public boolean saveObj(IEntityBean bean);
	
	/**
	 * 保存数据
	 * @param beans 实体对象集合
	 * @return 成功返回：true；失败返回：false
	 */
	public boolean saveObj(ArrayList<? extends IEntityBean> beans);
	
	/**
	 * 更新数据
	 * @param t 实体对象
	 * @return 成功返回：true；失败返回：false
	 */
	public boolean update(T t);
	
	/**
	 * 批量更新
	 * @param ts 实体对象集合
	 * @return 成功返回：true；失败返回：false
	 */
	public boolean update(ArrayList<T> ts);
	
	/**
	 * 更新数据
	 * @param bean 实体对象
	 * @return 成功返回：true；失败返回：false
	 */
	public boolean updateObj(IEntityBean bean);
	
	/**
	 * 批量更新数据
	 * @param beans 实体对象集合
	 * @return 成功返回：true；失败返回：false
	 */
	public boolean updateObj(ArrayList<IEntityBean> beans);
	
	/**
	 * 根据实体对象删除
	 * @param t 实体对象
	 * @return 成功返回：true；失败返回：false
	 */
	public boolean delete(T t);
	
	/**
	 * 根据实体对象集合批量删除
	 * @param ts 实体对象集合
	 * @return 成功返回：true；失败返回：false
	 */
	public boolean delete(ArrayList<T> ts);
	
	/**
	 * 根据主键删除
	 * @param id 主键
	 * @return 成功返回：true；失败返回：false
	 */
	public boolean delete(PK id);
	
	/**
	 * 根据主键删除
	 * @param clazz 指定实体对象
	 * @param id 主键
	 * @return 成功返回：true；失败返回：false
	 */
	public boolean delete(Class<? extends IEntityBean> clazz, PK id);
	
	/**
	 * 根据条件删除
	 * @param condition 条件对象
	 * @return 成功返回：true；失败返回：false
	 */
	public boolean delete(ICondition condition);
	
	/**
	 * 根据条件删除
	 * @param clazz 指定实体对象
	 * @param condition 条件对象
	 * @return 成功返回：true；失败返回：false
	 */
	public boolean delete(Class<? extends IEntityBean> clazz, ICondition condition);
	
	/**
	 * 根据主键批量删除
	 * @param ids 主键数组
	 * @return 成功返回：true；失败返回：false
	 */
	public boolean delete(PK[] ids);
	
	/**
	 * 根据主键批量删除
	 * @param clazz 指定实体对象
	 * @param ids 主键数组
	 * @return 成功返回：true；失败返回：false
	 */
	public boolean delete(Class<? extends IEntityBean> clazz, PK[] ids);
	
}
